package org.example.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * rdd的算子，也就是rdd的方法
 *
 *
 */
object Spark20_RDD_Operator_CoGroup {
  def main(args: Array[String]): Unit = {

    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val context = new SparkContext(conf)


    val rdd1: RDD[(String, Int)] = context.makeRDD(List(("a",1),("b",2)))

    val rdd2: RDD[(String, Int)] = context.makeRDD(List(("b",5),("a",4),("c",3),("c",9)))

    /**、
      * cogroup：connect + group
      *
      * 他会先对数据源中的数据的key进行分组，然后对彼此两个数据源进行连接
      */
    // 最多支持三次数据源cogroup
    // 次一个返回值是key，后面都是由集合组成的元组
    // 每个集合都是各个数据源中按相同的key分好的value集合
    val cgRdd: RDD[(String, (Iterable[Int], Iterable[Int]))] =
    rdd1.cogroup(rdd2)

    context.stop()
  }
}
